package com.wang.cloud.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.cloud.manage.domain.co.MenuPageCo;
import com.wang.cloud.manage.domain.entity.MenuEntity;
import com.wang.cloud.manage.domain.vo.MenuPageVo;
import com.wang.cloud.manage.domain.vo.MenuTreeVo;
import com.wang.cloud.manage.domain.vo.MenuVo;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 系统-菜单权限表 服务类
 * </p>
 *
 * @author wy
 * @since 2024-07-15
 */
public interface IMenuService extends IService<MenuEntity> {

    /**
     * 分页查询
     *
     * @param pageCo
     * @return
     */
    IPage<MenuPageVo> page(MenuPageCo pageCo);

    /**
     * 获取详情
     *
     * @param id
     * @return
     */
    MenuVo getInfo(Long id);

    /**
     * 查询-树
     *
     * @param status
     * @return
     */
    List<MenuTreeVo> getTree(String status);

    /**
     * 查询-树
     *
     * @param status
     * @param menuIds
     * @return
     */
    List<MenuTreeVo> getTree(String status,Collection<Long> menuIds);

    /**
     * 根据上级路由id 查询下级路由
     *
     * @param parentId
     * @return
     */
    List<MenuVo> getSubBaseListByParentId(Long parentId);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    void del(Long id);

    /**
     * 更新 子节点的数量
     *
     * @param id
     */
    void updateChildrenMenuNum(Long id);

    /**
     * 判断 是否拥有下级栏目
     *
     * @param id
     * @param status
     * @return
     */
    boolean hasSubMenu(Long id, String status);

    /**
     * 查询 站点下的 path（url、路由）是否重复
     *
     * @param path
     * @param menuId
     * @return
     */
    Boolean pathIsRepeat(String path, Long menuId);

    /**
     * 判断 路由是否全部存在
     *
     * @param menuIds
     * @return
     */
    Boolean allExists(Collection<Long> menuIds);
}
